import json
import re

from django.shortcuts import render

# Create your views here.
from django.views import View
from apps.users.models import User
from django.http import JsonResponse

"""
判断用户名是否重复的功能：
    
前端：当用户输入用户名之后，失去焦点，发送一个axios(ajax)请求

后端：(思路)
    请求：接收用户名
    业务逻辑：根据用户名查询数据库， 如果查询数量等于0，说明未注册
            否则说明有注册
    响应： JSON 
          {code:0, count:0/1,errmsg:ok}
     路由：GET  usernames/<username>/count/     
    （步骤）
        1.接收用户名
        2.根据用户名查询数据库
        3.返回响应
"""


class UsernameCountView(View):

    def get(self, request, username):
        # 1.接收用户名
        # if not re.match('[a-zA-Z0-9_-]{5, 20}', username):
        #     return JsonResponse({'code': 200, 'errmsg': '用户名不满足需求'})
        # 2.根据用户名查询数据库
        count = User.objects.filter(username=username).count()
        # 3.返回响应
        return JsonResponse({'code': 0, 'count': count, 'errmsg': 'ok'})


class RegisterView(View):

    def post(self, request):
        # 1.接受数据  POST.....JSON
        body_bytes = request.body
        body_str = body_bytes.decode()
        body_dict = json.loads(body_str)

        # 2.获取数据
        # username = body_dict['']
        username = body_dict.get('username')
        password = body_dict.get('password')
        password2 = body_dict.get('password2')
        mobile = body_dict.get('mobile')
        allow = body_dict.get('allow')

        # 3.验证数据
        #   3.1用户名，密码，确认密码，手机号，是否同意协议
        if not all([username, password, password2, mobile, allow]):
            return JsonResponse({'code': 400, 'errmsg': '参数不全'})

        #   3.2用户名满足规则，不能重复
        if not re.match('[a-zA-Z0-9_-]{5, 20}', username):
            return JsonResponse({'code': 400, 'errmsg': '用户名不满足规则'})

        #   3.3密码满足规则
        #   3.4确认密码和面一致
        #   3.5手机号满足规则，不能重复
        #   3.6需要同意协议

        # 4.数据入库
        # user = User(username=username, password=password, mobile=mobile)
        # user.save()
        # User.objects.create(username=username, password=password, mobile=mobile)

        user = User.objects.create_user(username=username, password=password, mobile=mobile)

        # 5.返回响应
        return JsonResponse({'code': 0, 'errmsg': 'ok'})
